package com.appapi.common;

import com.admin.util.LogUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 基础控制器
 * 其他控制器继承此控制器获得日期字段类型转换和防止XSS攻击的功能
 */
public class BaseController {
	Logger log = LogUtil.getLogger(BaseController.class);
	@Autowired
	private StringRedisTemplate userRedisTemplate;
	/**
	 * 把json转换为Map
	 * @author gongchengbing
	 * @date 2018年9月18日
	 * @version 1.0
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Map<String, Object> jsonToMap(String str){
		log.info("==============================接口开始==========================================");
		if(str!=null) {
			Map<String, Object> jsonObject =(Map<String, Object>) JSON.parse(str);
			return jsonObject;
		}
		return null;
	}
	public String toJson(Object resultM) {
//		Gson g = new Gson();
		String resultS = JSON.toJSONString(resultM, SerializerFeature.DisableCircularReferenceDetect);
//		String resultS = g.toJson(resultM);
		log.info("返回的数据：=============================="+resultS);
		log.info("==============================接口结束==========================================");
		return resultS;
	}

	public String mapToGson(Map<String, Object> resultM) {
		Gson g = new Gson();
		String resultS = g.toJson(resultM);
		log.info("返回的数据：=============================="+resultS);
		log.info("==============================接口结束==========================================");
		return resultS;
	}
	
	public <T> T jsonToT(String obj,Class<T> clazz){
		if(obj!=null) {
			T jsonObject = JSON.parseObject(obj, clazz);
			return jsonObject;
		}
		return null;
	}
	/*public UserDTO tokenVerify(){
		HttpServletRequest request = ContextHolderUtils.getRequest();
		String accessToken = request.getHeader(Const.USER_ACCESS_TOKEN);
		if (!StringUtils.isEmpty(accessToken)) {
			String userJson = userRedisTemplate.opsForValue().get(Const.USER_REDIS_PREFIX + accessToken);
			if (!StringUtils.isEmpty(userJson)) {
				UserDTO userDTO = JSONObject.parseObject(userJson, UserDTO.class);
				SessionUtil.setUser(userDTO);
				userRedisTemplate.expire(Const.USER_REDIS_PREFIX + accessToken, 2, TimeUnit.DAYS);
				return userDTO;
			}
		}
		return null;
	};*/

}
